Data processing has evolved to the point where users expect their computer to manage its own resources with minimal human intervention. Work has been done to manage the hardware portion of a computer system through automatic configuration and problem determination procedures, but little has been done to effectively manage the software portion of a computer system.
A typical user today needs several different programs to perform his specific application. These programs are often made by different program developers. Each program has dependencies on both hardware and software, and it is getting increasingly more difficult for users or application developers to put together a cohesive system where all of these dependencies are met. In addition, one software program may depend on another software program to be at a certain maintenance or release level to operate correctly. Often, the only way a user corrects a dependency problem is through trial and error or through a laborious search through a multitude of reference manuals.
The structure of a software program is often left up to the style and whims of each program developer. It is rare for two software programs today to have a consistent structure so that one program can easily discover information about the other program, such as maintenance levels and dependencies, even if they are developed by the same manufacturer.
Another problem facing program developers and users today is that programs invariably have errors that need to be fixed. Usually, the program developer must send an entirely new program to each user to fix the errors; there is no efficient method of replacing a small section of code in which the problem resided.
The job of an application developer today has become increasingly complex. When the user tells an application developer that he wants an application package tailored to fit his specific needs, the application developer may have problems combining several different programs to match the user's needs, while still allowing for the flexibility of future expansion. Often the application developer must settle for a costly unstructured conglomeration of general purpose programs that either performs functions the user does not need or does not perform all of the functions the user does need. In addition, the conglomeration of general purpose programs inefficiently uses more memory than necessary by storing functions the user does not need. This can be a special hardship to users who have used up all of their memory and cannot store additional, needed programs on their computers.
Program developers would clearly like to have each and every user satisfied with their program. However, it is far too costly today to develop a program customized to meet the needs of all individual user. Program developers would like to develop one program that would meet the needs of all users, from the user who needs all the functions of the program to the user who only needs one function of the program. If this could be done, the program developer could charge each user only for the functions used. As the user's needs grow, additional functions of the same program can be given to the user at an additional charge.